package java_0554_generic;

public class CustomGeneric {
    public static void main(String[] args) {

    }
}

class People<R, T, M> {
    String Name;
    R r;
    T t;
    M m;

    public People(String name, R r, T t, M m) {//构造器使用泛型
        Name = name;
        this.r = r;
        this.t = t;
        this.m = m;
    }

    //因为数组在new的时候不能确定数据的类型，无法开辟空间
    T[] ts;
//    T[] ts = new T(8);Type parameter 'T' cannot be instantiated directly

    //静态方法中不能使用类的泛型
    public void m1(M m) {}
    //因为静态是和类相关的，在类加载时，对象还没有创建
//    public static void m2(M m) {}
//    static R r;
}
//在继承接口时，指定泛型接口的类型
interface IA extends IUsb<String,Double>{}

//在实现IA 接口时自动将泛型转换
class AA implements IA{
    @Override
    public String getU(String s) {
        return null;
    }

    @Override
    public void hi(Double aDouble) {

    }

    @Override
    public void run(Double r1, Double r2, String u1, String u2) {

    }
}

interface IUsb<U,R>{
    int n = 10;
    //接口中的属性都是public static final 类型
//    U u;报错，接口中的属性不能使用泛型
    U getU(U u);
    void hi(R r);
    void run(R r1,R r2,U u1,U u2);

    //jdk8接口默认方法中可以使用泛型
    default U method (U u){
        return null;
    }
}